﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE;
using Insifo.BE.Gen;
using Insifo.DL;
using Insifo.DL.Gen;
using Insifo.BL.Gen;

namespace Insifo.BL.Gen
{
    public class BLParametro
    {
        //DLParametro _dl = new DLParametro();

        //Objeto transaccion
        DLTransactionMng _transaccion = null;

        //Instancias
        DLParametro _dlParametro = new DLParametro();
        DLParametroDetalle _DLParametroDetalle = new DLParametroDetalle();

        private DLParametro _dl = new DLParametro();


        /// <summary>
        /// Método que obtiene un Parametro
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public BEParametro Obtener(BEParametro pbe)
        {
            return _dl.Obtener(pbe);
        }
        
        /// <summary>
        /// Método que obtiene el Valor de un Parametro
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public string ObtenerValor(BEParametro pbe)
        {
            BEParametro be = new BEParametro();
            string strValor = string.Empty, strTipoDato = string.Empty;
            if (pbe.FlagCompania == "S")
            {
                pbe.IdCompania = Constantes.COMPANIA_DEFAULT;
            }
            be = _dl.Obtener(pbe);

            switch (pbe.TipoDato)
            {
                case "T":  //Texto
                    strValor = be.Texto;
                    break;

                case "N":   //Numerico
                    strValor = be.Numero.ToString();
                    break;
                case "F":   //Fecha
                    strValor = ((DateTime)be.Fecha).ToString(AppSettings.FormatoFechaHora);
                    //strValor = be.Fecha.ToString();
                    break;
                case "D":   //Descripcion
                    strValor = be.Descripcion;
                    break;
                default :   //Por Defecto
                     strValor = be.Texto;
                     break;
            }

            return strValor;
        }


        /// <summary>
        /// Método extrae los Parametros
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>

        public DataSet Listar(BEParametro pbe)
        {
            return _dlParametro.Listar(pbe);
        }

        /// <summary>
        /// Método que obtiene un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEParametro ObtenerMant(BEParametro pbe)
        {
            //return _dl.Obtener(pbe);

            BEParametro beRe = new BEParametro();
            beRe = _dlParametro.ObtenerMant(pbe);

            //Obtiene los Conceptos
            BEParametroDetalle beParametroDetalle = new BEParametroDetalle();
            beParametroDetalle.IdParametro = pbe.IdParametro;
            //beParametroDetalle.ParametroDetalle = pbe.ParametroDetalle;
                     
            return beRe;
        }

        /// <summary>
        /// Método que inserta un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEParametro Insertar(BEParametro pbe)
        {
            //return _dl.Insertar(pbe);
            BEParametro beRe = new BEParametro();
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dlParametro.Transaction = _transaccion;
                _DLParametroDetalle.Transaction = _transaccion;

                //Valores definidos
                beRe.Codigo = "";

                beRe = _dlParametro.Insertar(pbe);

                //Insertar el Detalle
                if (pbe.ParametroDetalle != null)
                {
                    foreach (BEParametroDetalle be in pbe.ParametroDetalle)
                    {
                        be.IdParametro = beRe.IdParametro;
                        //be.ParametroDetalle = beRe.ParametroDetalle;
                        _DLParametroDetalle.Insertar(be);
                    }
                }

                 //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beRe;
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEParametro Actualizar(BEParametro pbe)
        {
            //return _dl.Actualizar(pbe);
            BEParametro beParametro = new BEParametro();
            _transaccion = DLTransactionMng.Begin();
            try                 
            {
                _dlParametro.Transaction = _transaccion;
                _DLParametroDetalle.Transaction = _transaccion;

                //Valores definidos
                beParametro.Codigo = "";
                beParametro = _dlParametro.Actualizar(pbe);

                //Actualiza el Detalle
                if (pbe.ParametroDetalle != null)
                {
                    foreach (BEParametroDetalle be in pbe.ParametroDetalle)
                    {
                        be.IdParametro = pbe.IdParametro;
                        //be.ParametroDetalle = pbe.ParametroDetalle;
                        _DLParametroDetalle.Modificar(be);
                    }
                }

                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beParametro;
        }

        /// <summary>
        /// Método que elimina logicamente un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEParametro Eliminar(BEParametro pbe)
        {
            //return _dl.Eliminar(pbe);
            BEParametro beParametro = new BEParametro();
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dlParametro.Transaction = _transaccion;
                _DLParametroDetalle.Transaction = _transaccion;

                beParametro = _dlParametro.Eliminar(pbe);

                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beParametro;
        }

        /// <summary>
        /// Método extrae los Parametros
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>

        public DataSet Listar_Sel(BEParametro pbe)
        {
            return _dlParametro.Listar_Sel(pbe);
        }


    }
}
